查看原文
其他

破圈!不止于浏览器,WebAssembly 2020 大事记

夏歌 CSDN 2021-04-25

【CSDN 编者按】所谓温故而知新,适当的梳理回溯历史发展,有利于对未来做出更加准确的判断和更加可靠的计划。本文,让我们一起来回顾 Wasm 2020 年的发展……


作者 | 夏歌   责编 | 张红月
出品 | CSDN(ID:CSDNnews)
WebAssembly(WASM)最初由 W3C 的Mozilla、谷歌、微软、苹果等公司合作研发,是浏览器内应用程序的高性能执行引擎。目前已经在主流浏览器中如 Chrome、Firefox、Edge、Safari 中得到了广泛的支持。
但是随着 WASM 在开发者社区中越来越流行,WASM 也正在成为服务端以及云计算平台上的新锐。
2019 年 12 月,Bytecode Alliance 字节码联盟宣布正式成立。这个联盟成立的主要目标就是通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。服务端的 WebAssembly 正式被人所熟知。
回到 2020 年,WebAssembly 的 2020 年是以年初在 Google 总部举办的 WebAssembly summit 开始的,这是 WASM 社区第一次大型线下会议。对 WebAssembly 感兴趣的开发者从世界各地出发,汇聚 Mountain View。虽然这次会议只有一天,但是涵盖了众多议题包括 Wasm 在浏览器与服务端的发展。这也是疫情前最后的国际技术大会之一。
要把 WebAssembly 用于服务端,我们必须将它与浏览器之外的计算环境进行适配。语言、库与工具链是关键。


语言、库与工具链


相比 2019 年, WebAssembly 在2020年支持的语言新增了这些!下面这些语言都可以被编译成 Wasm 字节码在浏览器或者 Wasm 虚拟机上运行。
  • Swift
  • Kotlin
  • Java
  • COBOL
  • .NET
  • Go
借助工具链 LLVM ,我们可以把多种语言写的库编译成 WebAssembly,进而在浏览器中运行:
  • TensorFlow.js:TensorFlow 官方团队实现了在 WebAssembly 中使用 SIMD 和多线程来增强 TensorFlow.js
  • FFMPEG:这是一个著名的处理音视频的库。在开发者 Jerome Wu 的努力下,将用 C 写的 FFmpeg 导出了 WebAssembly 格式,从而使 FFMPEG 可以在浏览器中运行。
上面只是列举了两个著名的库。在2020年,我们经常看到经典游戏借助 WebAssembly 可以直接在浏览器中运行。
借助这些高性能的 C 语言的库,我们看到一些公司的 Web 应用在浏览器中使用 wasm,主要集中在音视频领域
  • Zoom
  • Google Meet
  • Bilibili


Mozilla 之变


时间来到 8 月份,Mozilla 宣布裁员 250 人,这其中比较受影响的团队之一就是 WebAssembly 团队,包括 Cranelift 与 WASI 的开发者。而 WASI 正是服务端 WebAssembly 的最重要规范。一时间,与这个世界一样,WebAssembly 的未来产生了很多不确定性。


Bytecode Alliance 字节码联盟


字节码联盟经过1年的发展,联盟成员没有任何变化,无新增,也无删减。但是在 WebAssembly 规范上有了不少的进展。其成员公司 Fastly 雇佣了 Mozilla 裁掉的 WebAssembly 团队,为整个生态的稳定发展做出了重要贡献。
Bytecode Alliance 主要围绕 nanoprocess 进行创新:将 WebAssembly 从一种应用程序的“编译目标”,发展成为一种可以用来组织应用程序的“模块化生态系统”。
首先便是 WASI ,这是针对 WebAssembly 平台的系统接口。在 2020 年,我们看到更多的 Wasm 实施支持了 WASI,支持 WASI 似乎已经成为必须要做的事情。
  • Deno 支持 WASI
  • V8/Node.js 支持 WASI
  • 用于网络连接的 wasi-socket 已经有了原型
  • 用于机器学习的 wasi-nn 正在开发中
  • 字节码联盟之外的 SSVM 贡献了 wasi-tensorflow ,使 TensorFlow 可以在 WebAssembly 程序中以 native speed 运行。
其次是 Module Linking(模块连接),可以被视为是两个 Wasm 模块直接相互通信的一种方式。
然后是 Interface Types,可以使 Wasm 与一系列丰富的值类型“沟通。
为了实现这一系列目标,字节码联盟也将开发一系列 Wasm-tools。
  • wasmparser,这是一个 Wasm 文件解析器。它非常节省内存资源,因为不会进行任何额外的资源分配,并且可以通过“流加载”的方式进行解析;
  • wasmprinter,这个工具可以将一个以 .wasm 结尾的 Wasm 二进制格式文件转换为对应的 .wat 文本格式,这对于调试和测试将会很有帮助;
  • Wat & wast,这两个工具可以将以 .wat 和 .wast 结尾的 Wasm 文本格式代码转换为对应的二进制格式字节码,这对于运行测试用例非常有用(因为在文本格式下,维护测试用例将会更加方便);
  • wasm-smith,这是一个测试用例生成器。可以生成“伪随机”的 Wasm 模块,并且保证这些 Wasm 模块是合法有效的,可以将其用于模糊测试。

电商平台 Shopify 基于 WebAssembly 搭建了一个函数服务,让使用 Shopify 搭建电商网站的商户可以根据自己的业务需求在 Shopify 平台上传自己的函数代码。Shopify 团队选择 WebAssembly 是因为 WebAssembly 是安全的,不会写入外部的恶意代码;同时也是高性能的,能够满足电商对运行速度的要求。同样的模式,在其他 SaaS 平台上也有尝试,比如图片处理服务商 Cloudinary、流数据处理商 YoMo。


超越字节码联盟


同时,不在 Bytecode Alliance 的 Wasm 虚拟机团队也在以自己的方式为社区做贡献。
Wamser 在2020年底发布 1.0.0 版本,这是 Wasm 虚拟机中第一发布 1.0.0 版本的虚拟机。Wasmer 支持将多种语言编译成 wasm 字节码,并且能够在 Mac、Linux、Windows 上运行。Wasmer 同时也支持多种编译器,Cranelift、LLVM 以及编译成智能合约的 Singlepass。
SSVM 对 WebAssembly 的贡献在于类 WASI 的扩展。WASI 规范为开发者提供了一种机制,可以有效、安全地扩展 WebAssembly 虚拟机。根据实际场景的需求,SSVM 做了 Tensorflow、存储、命令界面、以太坊、Substrate 等扩展。
除了通用的云计算与边缘计算,WebAssembly 虚拟机在区块链领域有了显著的采用。目前市面上比较大的公链项目都采用 WebAssembly 虚拟机作为智能合约的执行引擎,如 Polkadot 的 wasmi 虚拟机、Cosmos 的 cosmos-wasm、EOS、Ethereum、Oasis Labs、Solana、Near、ParaState 等公链。


社区活动


2020年,除了第一届 Wasm Summit ,我们还看到了许多其他的 WebAssembly meetup,例如 WebAssembly Live。
2021 年初,Linux Foundation 要举办 Cloud Native Wasm Day,这或许可以被视为服务端 WebAssembly 将也被更广泛的开发者社区认可的信号。与此同时,第二届 WebAssembly Summit 也已经确定了举办日期。2021 年,中国的 Wasm 大会也在筹备中。
虽然 WebAssembly 的 2020 年充满波折,但 WebAssembly 的 2021 年依然充满希望。
参考资料:
  • Bytecode Alliance: One year update:https://bytecodealliance.org/articles/1-year-update

  • WebAssembly Landscape:https://webassemblytoday.substack.com/p/webassembly-landscape

  • WebAssembly Summit 2020:https://medium.com/wasm/webassembly-summit-2020-881510ccb0c2

  • How Shopify Uses WebAssembly Outside of the Browser:https://shopify.engineering/shopify-webassembly

  • Wasmer 1.0:https://medium.com/wasmer/wasmer-1-0-3f86ca18c043

  • The SSVM 0.7 release brings WebAssembly to the public cloud:https://blog.secondstate.io/post/20210202-ssvm-release/

  • Cloudinary:https://cloudinary.com/documentation/custom_functions#webassembly_functions

  • YoMo:https://github.com/yomorun/yomo-flow-ssvm-example


☞X86 "将死"?RISC-V 正当立

程序员拒带电脑回家被开除获赔 19.4 万;库克称,很多功能来自中国消费者反馈;谷歌开源1.6万亿参数语言模型 | 极客头条

新的一年,这7个“菜鸟坑”千万别再踩了!


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存